{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "infrared-logan", "metadata": {}, "outputs": [], "source": [ "# In this tutorial we will numerically evaluate inverse Laplace transforms\n", "# using 'invertlaplace()' in the mpmath module.\n", "\n", "# Inverse Laplace transforms are very useful in electronics and are often\n", "# used to calculate the transient response of circuits. Typically, one\n", "# calculates the response of the circuit in the \"s = jw\" or complex-frequency\n", "# domain using methods that a familiar from steady-state circuit analysis.\n", "# Then one takes the inverse Laplace transform to that result to deduce\n", "# the circuit's transient response. In this tutorial, we demonstrate the\n", "# methode using two examples for which both the transient and s-domain \n", "# responses are already known." ] }, { "cell_type": "code", "execution_count": 2, "id": "breeding-tuner", "metadata": {}, "outputs": [], "source": [ "# First import the modules that will be required.\n", "import mpmath as mp\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 3, "id": "essential-ordering", "metadata": {}, "outputs": [], "source": [ "# This line sets the number of decimal points (dps) to be used in calculations.\n", "# We will required mp.dps to be high in order to calculate precise transient \n", "# responses.\n", "mp.dps = 350" ] }, { "cell_type": "code", "execution_count": 4, "id": "spread-valuation", "metadata": {}, "outputs": [], "source": [ "# The main function that we will use is 'mp.invertlaplace()'. To execute,\n", "# it requires the s-domain function fs that is to be transformed into the\n", "# time domain and a single time. In order to extract the full transient\n", "# response, we define a function that passes times from a list one by one.\n", "# The degree option determines the number of terms to be used in the approximations.\n", "# The higher, the better the result and the longer the calculation takes.\n", "# The 'if' statement is just used to print the progress of the calculation.\n", "# By default, pnt = True and the progress will be printed in increments of\n", "# 10%.\n", "def trans_response(tt, fs, deg, pnt = True):\n", " trans = []\n", " cnt = 0\n", " for t in tt: \n", " if len(trans) % int(pts/10) == 0 and pnt == True:\n", " print(cnt*10,'%', sep = '')\n", " cnt += 1\n", " trans += [mp.invertlaplace(fs, t, method = 'dehoog', degree = deg)]\n", " return trans" ] }, { "cell_type": "code", "execution_count": 5, "id": "center-incident", "metadata": {}, "outputs": [], "source": [ "# In the first example, the we will take the inverse Laplace transform of\n", "# e^(-c*s)/s which should result in a step at t = c.\n", "Vg = 2\n", "c = 0.5e-6\n", "fs = lambda s: Vg*mp.exp(-c*s)/s" ] }, { "cell_type": "code", "execution_count": 6, "id": "electronic-rates", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2021-03-11 10:31:16.021710\n", "0%\n", "10%\n", "20%\n", "30%\n", "40%\n", "50%\n", "60%\n", "70%\n", "80%\n", "90%\n", "2021-03-11 10:31:18.694646\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# We use a 'with' statement to temporarily reduce the dps for the first \n", "# example within the indented block of code.\n", "with mp.workdps(20):\n", " # Here, we call the fucntion that we defined above and then plot the result.\n", " from datetime import datetime\n", " print(datetime.now())\n", " pts = 100\n", " tt = np.linspace(1e-10, 1e-6, pts)\n", " plt.plot(tt, trans_response(tt, fs, 20), 'k.', markersize = 2)\n", " print(datetime.now())" ] }, { "cell_type": "code", "execution_count": 7, "id": "injured-caribbean", "metadata": {}, "outputs": [], "source": [ "# This next example is the transient response of a coaxial cable to a \n", "# voltage step. The centre conductors of the coax at one end is connected\n", "# to a resistor of resistance Rg and the voltage step of size Vg is applied to\n", "# the opposite end of the Rg. The free end of the coaxial cable is left open.\n", "# The coaxial cable has a characteristic impedance of Z0 = 50 ohms and a \n", "# length of 8 meters.\n", "Vg = 1 # volt\n", "ell = 8 # meters\n", "v0 = 3e8/np.sqrt(2.1) # m/s\n", "Rg = 1e3 # ohms\n", "Z0 = 50 # ohms" ] }, { "cell_type": "code", "execution_count": 8, "id": "silent-quebec", "metadata": {}, "outputs": [], "source": [ "# This is the s-domain response of the coax. \n", "fs = lambda s: (Vg/s)*mp.coth(s*ell/v0)/(Rg/Z0 + mp.coth(s*ell/v0))" ] }, { "cell_type": "code", "execution_count": 9, "id": "pediatric-advocate", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2021-03-11 10:33:31.172249\n", "0%\n", "10%\n", "20%\n", "30%\n", "40%\n", "50%\n", "60%\n", "70%\n", "80%\n", "90%\n", "2021-03-11 10:45:05.458700\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Here, we call our function with high 'dps' and 'degree' values and then\n", "# plot the calculated transient response. We expect to get a 'staircase'\n", "# response with the size of the steps decreasing as time evolves. This block\n", "# of code took about 12 minutes to execute on my laptop.\n", "plt.figure()\n", "from datetime import datetime\n", "print(datetime.now())\n", "pts = 500\n", "tt = np.linspace(1e-10, 1e-6, pts)\n", "plt.plot(tt, trans_response(tt, fs, 150), 'k.', markersize = 2)\n", "print(datetime.now())" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }